1. Field of the Invention
The present invention relates generally to an improved data processing system. More specifically, the present invention is directed to a computer implemented method, system, and computer usable program code for distributing input/output requests to a plurality of software components in an input/output subsystem of an operating system.
2. Description of the Related Art
Today, components in an input/output (I/O) subsystem of a computer operating system interact by exchanging I/O request structures and by making “point in time” function calls to one another. Usually, an operation may pass through several layers of components in an actual computer operating system. For example, in an Advanced Interactive Executive (AIX®) operating system, which is a product of the International Business Machines (IBM®) Corporation located in Armonk, N.Y., it is not unusual for a disk I/O operation to involve six to eight component layers. The layers may, for example, include a file system layer, a virtual memory manager layer, a logical volume manager layer, a multi-path device driver layer, a disk device driver layer, a fibre channel protocol device driver layer, and a fibre channel adapter driver layer.
Generally, each component in the I/O stack accepts an I/O request from an upper level component or the component “above”, performs some type of translation of the I/O request, and then issues the translated I/O request to a lower level component or the component “below”. Later, operation completion indications flow up through the I/O stack, from the “bottom” to the “top”. Typically, components at the “top” of the I/O stack interact with user applications, while components at the “bottom” of the I/O stack interact with physical devices.
However, during operation processing, bottlenecks may unpredictably occur in various layers within the software I/O stack, thus causing a crash in the data processing system. Currently, one solution to this bottleneck problem is to throttle I/O requests at the file system layer as the I/O requests enter the I/O stack. I/O throttling is a technique used to slow down processing of I/O requests by delaying the dispatch of the I/O requests to subsequent layers or components to prevent a system crash. This type of I/O throttling technique is insufficient because not all I/O requests enter the I/O stack via the file system. In addition, file systems may reside on various devices and may have differing characteristics. Further, file systems are an abstraction of the underlying devices and therefore do not, and should not, have information regarding details of the I/O stack “below” it.
Therefore, it would be beneficial to have an improved computer implemented method, system, and computer usable program code for distributing I/O requests to a plurality of software components in an I/O stack of an operating system to balance component load, increase system productivity, and prevent system crashes.